#ifndef __MOTOR_L298N_H
#define __MOTOR_L298N_H

#include "stm32f10x.h"

#include "encoder.h"
#include "pwm.h"
#include "pid.h"

#define IS_PERCENTAGE(n) (((float)n)/100)        //百分数代换

/* MotorA, MotorB, MotorC ... or MotorL, MotorR ... */
typedef struct {

    int32_t *code;       // 电机编码指针
    int16_t *speed;     // 电机单位时间内编码数指针
    float power;        // 电机功率比，范围：-1 ~ 1，绝对值等效PWM占空比，精度为：1/Reso

    /* 电机方向控制口 */
    GPIO_TypeDef *MOT_GPIO1;       // 写：GPIOx
    GPIO_TypeDef *MOT_GPIO2;       // 写：GPIOx
    uint16_t MOT_GPIO1Pin;         // 写：GPIO_Pin_x
    uint16_t MOT_GPIO2Pin;         // 写：GPIO_Pin_x

    /* 定义电机受控的PWM */
    PWM_Builder *PWMx;

    /* 定义电机使用的编码器 */
    EncoderX *EncoderX;

    /* 定义电机使用的PID控制器 */
    PIDController *PIDController;
    
} MotorX;

void MOT_Init(MotorX *MotorX);
void MOT_On(MotorX *MotorX, float power);
void MOT_Off(MotorX *MotorX);
void MOT_Reset(MotorX *MotorX);

#endif
